<?php
/**
 * 
 * @author Natanael
 * modelo de actividad
 * 
 */
class Mscore extends Model{
      
	  private $_etapas = 0;
	  private $_modo = 1;
	  private $_fechaA = " ";
	  private $_fechaB = " ";
	  private $_agrupado = FALSE;
	  
	  public function __construct()
	  {
	     parent::Model();
	     $this->load->model(array('vtcompaniamodel'));
	  }
	  
  	  public function dataRScore($etapa, $modo, $fechaA, $fechaB, $agrupado)
	  {
		/**
		 *
		 * @var $_fechaA and $_fechaB
		 * la $fechaA coreponde a la primera fecha de comparacion 
		 * es decil que todo registro deve ser mayor que esta fecha.
		 * La $fechaB  coresponde a la segunda fecha de comparacion
		 * es decil que todo registro deve ser menor de esta decha
		 * moyor mente esta fecha es la actual.   
		 * formato de fecha yyyy-mm-dd 
		 * 
		 * @var $_modo
		 * Es el modo de busqueda definido.
		 * Los cuales son 
		 *               0 => Registro Activo
		 *               1 => Registro Historico
		 *               3 => Ambos
		 *               4 => Calculable
		 *               
		 * @var $_etapas
		 * Etapa que debe de tener los prosesos
		 *            
		 */
		
		
		$this->_etapas = $etapa;
		
		$this->_modo = $modo;
		$this->_fechaA = $fechaA;
		$this->_fechaB = $fechaB;
		
		$this->_agrupado = $agrupado;
	
		$_companyActivos = array();
		$_companyHistorico = array();
		$_objectoRegistro = array();
		$_companyVentas = array();
		$_companyEntrega = array();
		
			$_companyActivos = $this->mcompania->loadCompaniaByDataArray(array("EstadoCompania" => 0));
			$_companyEntrega = $this->mcompania->loadCompaniaByDataArray(array("EstadoCompania" => 0));
			$_companyVentas  = $this->vtcompaniamodel->loadRegistros();
		    $_companyHistorico = $this->CompaniaHistorico->loadCompaniaHistorico();
			
		switch ($this->_modo){
			case 0:
				$_objectoRegistro = $_companyActivos; 
			break;
			case 1:			
			    $_objectoRegistro = array_merge($_companyHistorico, $_companyVentas, $_companyEntrega);
		    break;
			case 4:
				 $_objectoRegistro = array_merge($_companyHistorico, $_companyVentas, $_companyEntrega, $_companyActivos);	
			break;		
		 }
		 

       return $this->dataRScoreProseso($_objectoRegistro);

	 }
	
	  private function dataRScoreProseso($_objectoRegistro){
		 

		 foreach ($_objectoRegistro as $ojt){
		 	 			 
		          	  $_whereProseso = array("FechaSysProceso >=" => $this->_fechaA,
		          	                         "FechaSysProceso <=" => $this->_fechaB,
		          	                         "IdEtapa"            => $this->_etapas,
		          	                         "IdCompania"         => $ojt->getIdCompania());
		          
		           $_whereProseso = array("IdEtapa"    => $this->_etapas,
		          	                      "IdCompania" => $ojt->getIdCompania());
		         
		           $_allProceso =  $this->mprocesos->getDataIdCompany($_whereProseso);
		          
		           if (count($_allProceso[0]) == 0)
		                   continue;            
		                   
		            if($this->_agrupado == TRUE)
		                $_datosProceso[] = $this->allProcesoAgrupado($_allProceso); 
		            else    
		                $_datosProceso[] = $this->allProcesoDetalles($_allProceso);             
		                     
		 }
		 
		 return $_datosProceso;
		
	 }
	 
	 public function allProcesoAgrupado($_allProceso)
	 {
	        $_datosProceso = array();
	        $_horaExtra = 0;
	        $_horaDurada = 0;
	        
	         foreach ($_allProceso as $ojtProsse){
	         
	         	   $_datosEtapa = $this->metapas->LoadEtapaById($ojtProsse->getIdEtapa());
	         	   
	         	   $fechaDurada = $ojtProsse->getFechaS();	 	          	   
		 	       $_estatusProseso = $this->mestatus->LoadEstatusById($ojtProsse->getIdEstatus());
		 	       $_usuarioData = $this->usuarios->LoadUsuarioById($ojtProsse->getIdUsuario());
		 	          	   
		 	         	
		 	       $_companiaData = $this->mcompania->LoadCompaniaById($ojtProsse->getIdCompania());
		 	              
		 	              
		 	       
		 	          	        	 	          	   
		 	          	   if ($fechaDurada == '0000-00-00 00:00:00')
		 	          	             $fechaDurada = date("Y-m-d");  
		 	          	     
	             
		 	       $_horaDurada += $this->chcalendario->calcularDias($ojtProsse->getFechaSys(),$fechaDurada) * 24;
		 	          	
		 	       if ($ojtProsse->getIdEstatus() == 16 || $ojtProsse->getIdEstatus() == 17 || $ojtProsse->getIdEstatus() == 18 || $ojtProsse->getIdEstatus() == 19)
		 	          	          $_horaExtra += $_estatusProseso->getDias();       
                   		 	          	    
	                $idProseso = $ojtProsse->getIdProceso();
	                $etapaName = $_datosEtapa->GetNombre();
	                $statusName = $_estatusProseso->getNombre();
	                $usuarioName = $_usuarioData->getNombreUsuario();
	               // $companyName = $_companiaData->getNombreCompania();
	                
	                
	                
	                $idCompany = $ojtProsse->getIdCompania();
	                
		 	 		}
		 	           
		 	           $_horaPermitidas = ($_datosEtapa->GetTiempoEstimado()+$_horaExtra) * 24;
		 	           $_horaPasada = $_horaPermitidas - $_horaDurada;
		 	         
		 	           if ($_horaPasada < 0) 
		 	          	      $_puntuacion = -1;
		 	           else  
		 	          	      $_puntuacion = 1;    
		 	          
		 	                           $_datosProceso[$idCompany][] =  array("idProseso"      => $idProseso,
		 	          	                                                     "etapa"          => $etapaName,
		 	          	                                                     "estatus"        => $statusName,
		 	          	                                                     "usuario"        => $usuarioName,
		 	          	                                                     //"referencia"     => $companyName,
		 	          	                                                     "horaDurada"     => "$_horaDurada",
		 	          	                                                     "horaPermitida"  => "$_horaPermitidas",
		 	          	                                                     "horaPasada"     => "$_horaPasada",
		 	          	                                                     "puntuacion"     => "$_puntuacion",
		 	          	                                                     "horaExtras"     => $_horaExtra * 24);	      
		 	          	      
		 	          	      
		 	          return $_datosProceso;
	         	   
	         
	         }
	  
	 public function allProcesoDetalles($_allProceso)
	 {     
	 	    $_datosProceso = array();
	 	    
	        foreach ($_allProceso as $ojtProsse){
	        	 
	        	           $_datosEtapa = $this->metapas->LoadEtapaById($ojtProsse->getIdEtapa());
	        	           
		 	          	   $fechaDurada = $ojtProsse->getFechaS();	 	          	   
		 	          	   $_estatusProseso = $this->mestatus->LoadEstatusById($ojtProsse->getIdEstatus());
		 	          	   $_usuarioData = $this->usuarios->LoadUsuarioById($ojtProsse->getIdUsuario());
		 	          	   
		 	          	     if ($ojtProsse->getIdCompania() == 0 || $ojtProsse->getIdCompania() == 3 || $ojtProsse->getIdCompania() == 4)
		 	          	        $_companiaData = $this->mcompania->LoadCompaniaById($ojtProsse->getIdCompania());
		 	          	   else      
		 	          	        $_companiaData = $this->CompaniaHistorico->loadComapniaHistoricoById($ojtProsse->getIdCompania());
		 	          	   		 	          	   
		 	          	   if ($fechaDurada == '0000-00-00 00:00:00')
		 	          	             $fechaDurada = date("Y-m-d");  
		 	          	     
		 	         
		 	          	    $_horaDurada = $this->chcalendario->calcularDias($ojtProsse->getFechaSys(),$fechaDurada) * 24;
		 	          	
		 	          	    if ($ojtProsse->getIdEstatus() == 16 || $ojtProsse->getIdEstatus() == 17 || $ojtProsse->getIdEstatus() == 18 || $ojtProsse->getIdEstatus() == 19)
		 	          	            $_horaExtra = $_estatusProseso->getDias();
		 	          	            
		 	          	    else  
		 	          	         $_horaExtra = "0";         
		 	          	    
		 	          	    $_horaPermitidas = ($_datosEtapa->GetTiempoEstimado()+$_horaExtra) * 24;
		 	          	
		 	          	    $_horaPasada = $_horaPermitidas - $_horaDurada;
		 	          	    
		 	          	    if ($_horaPasada < 0) 
		 	          	    	 $_puntuacion = -1;
		 	          	    else  
		 	          	         $_puntuacion = 1;         
		 	          	
		 	          	    $_datosProceso[$ojtProsse->getIdCompania()][] =  array("idProseso"      => $ojtProsse->getIdProceso(),
		 	          	                                                           "etapa"          => $_datosEtapa->GetNombre(),
		 	          	                                                           "estatus"        => $_estatusProseso->getNombre(),
		 	          	                                                           "usuario"        => $_usuarioData->getNombreUsuario(),
		 	          	                                                           "referencia"     => $_companiaData->getNombreCompania(),
		 	          	                                                           "horaDurada"     => "$_horaDurada",
		 	          	                                                           "horaPermitida"  => "$_horaPermitidas",
		 	          	                                                           "horaPasada"     => "$_horaPasada",
		 	          	                                                           "puntuacion"     => "$_puntuacion",
		 	          	                                                           "horaExtras"     => $_horaExtra * 24);
	
		 	          }
		 	          
		 	          return $_datosProceso;
	 }

	 
     public function scoreDatos($etapa, $usuario = false, $fecha1 = false, $fecha2 = false)
	 {
	 	
	 	$dias = "/15/".date("Y");
	 	 
	 	if (date("d") > 15) {
	 		
	 		if ($fecha1 == false)
	 	       $fecha1 = date("m").$dias;
	 	   
	 	    if ($fecha2 == false)    
	 	       $fecha2 = date("m")+1;
	 	       $fecha2 .= $dias; 
	 	       
	 	}else{
	 		
	 	    if ($fecha1 == false)	
	 		     $fecha1 = date("m")-1;
	 		     $fecha1 .= $dias;
	 		     
	 		 if ($fecha2 == false) 
	 		     $fecha2 = date("m").$dias;
	 	}
	 	
	 	$this->session->set_flashdata('fecha1', $fecha1);
	 	$this->session->set_flashdata('fecha2', $fecha2);
	 	
	 	 $compania = $this->dataRScore($etapa, 4, $fecha1, $fecha2, TRUE);
	 	 

	 	 
	 	 $cantidad = count($compania);
	 	    
	 	  foreach ($compania as $ojt){	 	 
	 	  	 foreach ($ojt as $k){
	 	  	 	 if($k[0]["puntuacion"] != 1)
	 	  	       $cantidad -= 1;

	 	  	      $title =  $k[0]["etapa"]; 	
	 	  	 } 	
	 	  }
	 	  	
     	 $porcien = ($cantidad * 100)/count($compania);
	 	    
	 	 $porcien = intval($porcien);
	 	    
	 	    if ($usuario == true)
	 	       return  $porcien;

	 	    return $this->scoreGraficos($porcien,$title);

	 }
	 
	 public function scoreGraficos($valor, $title){
		
		  $strXML = "<chart lowerLimit='0' upperLimit='100' numberSuffix='%25' chartTopMargin='10' bgColor='000000' showBorder='0' chartBottomMargin='15' basefontColor='000000' toolTipBgColor='ffffff'>
                       <colorRange>
                            <color minValue='0' maxValue='75' code='FF654F'/>
                            <color minValue='75' maxValue='90' code='F6BD0F'/>
                            <color minValue='90' maxValue='100' code='8BBA00'/>
                       </colorRange>

                      <dials>
                           <dial value='".$valor."' rearExtension='10'/>
                      </dials>
                      
                      <trendpoints>
                        <point value='50' displayValue='".$title."' fontcolor='FF4400' useMarker='3' dashed='1' dashLen='2' dashGap='2' valueInside='1' />
                     </trendpoints>
                      
                      <annotations>
                           <annotationGroup id='Grp1' showBelow='1'>
                                <annotation type='rectangle' x='0' y='0' toX='400' toY='200' radius='10' fillColor='ffffff, ffffff' fillAngle='180'/>
                           </annotationGroup>
                      </annotations>
                    </chart>";
 
          return $this->chgraficos->renderChartHTML(base_url()."public/swf_charts/AngularGauge.swf", $title ,$strXML, $title, 230, 150, false);
	}
	
	public function porUsuario($usuario, $excecion = false)
	{
	    switch ($usuario){
	      
	    	case 12:
	    		 $etapa = array(2, 3, 15, 9);
	    	break;
	    	case 11:
	    		 $etapa = array(1); 
	        break;
	    }
	    
	    $porsiento = 0;
	    
	    if ($usuario != 10) {
	        foreach ($etapa as $k){
	             $porsiento += $this->scoreDatos($k, $usuario); 
	        }
	         $porsiento = intval($porsiento/count($etapa));
	    }else{
	    
	        $porsiento = $this->porExpecial();
	    }
	   
	    if ($excecion == true)
	       return $porsiento;
	    
	    $usuario = $this->usuarios->LoadUsuarioById($usuario);
	    $usuario = $usuario->getNombreUsuario();
	   
	     return $this->scoreGraficos($porsiento,$usuario);
	}
	
	public function porExpecial()
	{
	
		$porciento = $this->porUsuario(12, true);
		$porciento += $this->porUsuario(11, true);
		$porciento += $this->scoreDatos(16, true); 
		
		 $porciento = intval($porciento / 3);
		 
		 return $this->scoreGraficos($porciento,"Yury");
		
	}
	
	 public function inbount($usuario)
	 {
	 	
          ini_set('memory_limit','64M');
	 	  $servicios = $this->mtransaccionentrada->loadTransacionByArray(array('IdUsuario' => $usuario, 'StadoTransaccion'  => 0));
	 	  
	 	  $j = 0;
	 	  
	 	  foreach ($servicios as $k){
	 	   if ($k->getProximoContacto() > date("Y-m-d")."00:00:00") {
	 	  		$j += 1;
	 	  	}
	 	  	
	 	  }	
	 	   	  
	 	   $porsiento = ($j * 100)/ count($servicios);
	 	   $porsiento = intval($porsiento);
	 	  
	 	   $usuario = $this->usuarios->LoadUsuarioById($usuario);
	       $usuario = $usuario->getNombreUsuario();
	 	  
	 	   return $this->scoreGraficos($porsiento,$usuario);
	 }
	 
	 public function loadGraficosControlInterno()
	 {
	     $usuarios = 8;
	     
	        $where = array("IdUsuario"   => $usuarios);
	     
	     	$_companyActivos = $this->mcompania->loadCompaniaByDataArray($where);
	     
	     return $_companyActivos;
	 }
	  
}